package objetos.proyectiles;

import movimiento.Posicion;
import movimiento.patrones.Rectas;
import objetos.Danio;
import objetos.ObjetoMovil;
import org.jdom.*;
import vistas.FactoryVistas;
import ar.uba.fi.algo3.titiritero.ControladorJuego;
import ar.uba.fi.algo3.titiritero.vista.Imagen;
import auxiliares.Vector;

/*
 * Clase que modela los disparos laser. Tiene 2 set de constructores: Los que utilizan
 * la potencia del ca��n laser que los dispara para establecer su da�o, y los que
 * se setean con el da�o base solamente. 
 */
public class LaserShoot extends Proyectil {

	public LaserShoot(ObjetoMovil origen) {
		super(origen);
		setPoder(new Danio(20));
	}

	public LaserShoot(ObjetoMovil origen, Posicion posicion) {
		this(origen);
		setPosicion(posicion);
	}

	public LaserShoot(ObjetoMovil origen, int x, int y) {
		this(origen, new Posicion(x, y));
	}

	public LaserShoot(ObjetoMovil origen, int multiplicadorPoder) {
		super(origen);
		setPoder(new Danio(20 * multiplicadorPoder));
	}

	public LaserShoot(ObjetoMovil origen, Posicion posicion,
			int multiplicadorPoder) {
		this(origen);
		setPosicion(posicion);
	}

	public LaserShoot(ObjetoMovil origen, int x, int y, int multiplicadorPoder) {
		this(origen, new Posicion(x, y));
	}

	@Override
	public Imagen darVista(ControladorJuego controlador) {
		return FactoryVistas.crearVista(this, controlador);
	}

	/* Persistencia */

	/* Constructor a partir de nodoXML */
	public LaserShoot(Element nodo) {
		super();
		setTamanio(5);
		setPatron(new Rectas());
		setPoder(new Danio(20));
		int pX = Integer.parseInt(nodo.getAttributeValue("posicionX"));
		int pY = Integer.parseInt(nodo.getAttributeValue("posicionY"));
		this.setPosicion(new Posicion(pX, pY));

		int vX = Integer.parseInt(nodo.getAttributeValue("velocidadX"));
		int vY = Integer.parseInt(nodo.getAttributeValue("velocidadY"));
		setVelocidad(new Vector(vX, vY));
	}

	/* NodoXML a partir de instancia */
	@Override
	public Element obtenerNodo() {
		Element nodo = new Element("laserShoot");
		nodo.setAttribute(new Attribute("posicionX", Integer.toString(this
				.getPosicion().getEnX())));
		nodo.setAttribute(new Attribute("posicionY", Integer.toString(this
				.getPosicion().getEnY())));
		nodo.setAttribute(new Attribute("velocidadX", Integer.toString(this
				.getVelocidad().getComponenteX())));
		nodo.setAttribute(new Attribute("velocidadY", Integer.toString(this
				.getVelocidad().getComponenteY())));
		return nodo;
	}

}
